package com.lee.message.service;

import com.lee.common.model.Message;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lishuo
 * Date: 2023-10-08
 * Time: 10:55
 */
public interface IMessageService {

    /**
     * 发送站内信
     * @param message 站内信对象
     */
    void create(Message message);

    /**
     * 获取未读站内信
     * @param receiveUserId 接收者Id
     * @return
     */
    Integer selectUnReadCount(Long receiveUserId);

    /**
     * 根据接收者Id查询站内信列表
     * @param receiveUserId 接收者Id
     * @return
     */
    List<Message> selectByReceiveUserId(Long receiveUserId);

    /**
     * 更新站内信状态
     * @param id 站内信Id
     * @param state 站内信状态
     */
    void updateStateById(Long id,Byte state);

    /**
     * 根据站内信Id查询站内信
     * @param id 站内信Id
     * @return
     */
    Message selectById(Long id);

    /**
     * 回复站内信
     * @param repliedId 要回复的站内信Id
     * @param message 回复的对象
     */
    @Transactional
    void reply (Long repliedId, Message message);

    // --- websocket 拓展查询 ---

    /**
     * 根据当前用户id查询发信人列表
     * @param receiveUserId 接收者Id
     */
    List<Message> selectPostUserByReceiveId(Long receiveUserId);

    /**
     * 根据当前用户id和postUserId查询聊天记录
     * @param receiveUserId 接收者Id
     * @param postUserId 接收者Id
     */
    List<Message> selectChatHistoryById(Long receiveUserId,Long postUserId);

    /**
     * 插入实时消息
     * @param message
     */
    void createRealTime(Message message);
}
